02.矢量、栅格、Mxd的加载

流程图

#####引用类库及接口描述

  • 引用类库:
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesRaster;
  • 接口:
1. OpenFileDialog 接口:用于打开文件对话框
2. IWorkspaceFactory 接口:工作空间工厂,工作空间的发布者,允许客户连接通过一组连接属性定义的工作空间。普通类。
3. IWorkspace 接口:提供访问工作空间的通用属性和方法,如它的连接属性,以及包含的数据集的方法。
4. IFeatureWorkspace 接口:用于访问和管理地理数据库中的要素的重要成分—数据集。
5. IRasterWorkspace 接口:用于打开和建立基于文件的RasterDataset。
6. IFeatureClass 接口:获取和设置要素类属性的主要接口。
7. IFeatureLayer 接口:继承自ILayer,提供了访问基于矢量数据图层的属性和方法。、
8. ILayer 接口:Layer 是图层对象,是数据的外壳,必须建立在数据的基础上才有意义。
9. IMap 接口:许多图层的集合,由多个ILayer构成。
结构
  • 矢量
    1. 获取shp文件的路径和文件名称
    2. 由工作空间工厂创建Shp工作空间工厂类,打开工作空间
    3. 转换工作空间为要素工作空间,打开要素类
    4. 创建要素图层,设置要素图层的FeatureClass为上面打开的要素类
    5. 转换IFeatureLayer为ILayer,添加到mapcontorl中。
    6. 刷新
  • 栅格
    1. 获取shp文件的路径和文件名称
    2. 由工作空间工厂创建Raster工作空间工厂类,打开工作空间
    3. 转换工作空间为栅格工作空间,打开栅格数据集
    4. 影像金字塔的判断和创建
    5. 新建栅格图层,添加到mapcontorl中。
    6. 刷新
代码

七、代码

  1. 打开按钮的点击事件

    private void menu_open_Click(object sender, EventArgs e)
    {
        addMapFile();
    }
  2. 打开文件

    private void addMapFile()
    {
        OpenFileDialog pOpenfileDialog = new OpenFileDialog();
        pOpenfileDialog.Filter = "全部文件|*.*" +
            "|Shape 文件|*.shp" +
            "|Mxd 文件|*.mxd" +
            "|栅格 文件|*.tif;*.tiff;*.jpep;*.jpg;*.png;*.bmp";
        if (pOpenfileDialog.ShowDialog() == DialogResult.OK)
        {
            string path = pOpenfileDialog.FileName;
            bool shp = path.EndsWith(".shp");
            bool mxd = path.EndsWith(".mxd");
            bool tif = path.EndsWith(".tif") || path.EndsWith(".tiff") || path.EndsWith(".jpep") 
                || path.EndsWith(".jpg") || path.EndsWith(".png") || path.EndsWith(".bmp");
    
            if (shp)
                openShpFile(path);
            else if (mxd)
                openShpFile(path);
            else if (tif)
                openShanGe(path);
        }
    }
  3. 打开shp

    /// <summary>
    /// 打开shp数据
    /// </summary>
    private void openShpFile(string file)
    {
        int index = 0;
        index = file.LastIndexOf("\\");
        string filePath = file.Substring(0, index);
        string fileName = file.Substring(index + 1, file.Length - (index + 1));
        IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();
        IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0);
        IFeatureWorkspace pFeatureWokkspace = pWorkspace as IFeatureWorkspace;
        IFeatureClass pFC = pFeatureWokkspace.OpenFeatureClass(fileName);
        IFeatureLayer pFLayer = new FeatureLayer();
        pFLayer.FeatureClass = pFC;
        pFLayer.Name = pFC.AliasName;
        ILayer pLayer = pFLayer as ILayer;
        IMap pMap = mapControl.Map;
        pMap.AddLayer(pLayer);
        mapControl.ActiveView.Refresh();
    }
  4. 打开栅格

    /// <summary>
    /// 打开栅格数据
    /// </summary>
    private void openShanGe(string Path)
    {
        string RasterPath = System.IO.Path.GetDirectoryName(Path);
        string RasterName = System.IO.Path.GetFileName(Path);
        IWorkspaceFactory pRasterWsF = new RasterWorkspaceFactory();
        IWorkspace pWs = pRasterWsF.OpenFromFile(RasterPath, 0);
        IRasterWorkspace pRasterWs = pWs as IRasterWorkspace;
        IRasterDataset pRasterDS = pRasterWs.OpenRasterDataset(RasterName);
        IRasterPyramid pRasterPyramid = pRasterDS as IRasterPyramid;
        if ((pRasterPyramid != null)&&(!pRasterPyramid.Present))
        {
            if (MessageBox.Show("是否开始创建金字塔?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.OK)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                   pRasterPyramid.Create();
                sw.Stop();
                MessageBox.Show("创建完成,Time:"+ sw.ElapsedMilliseconds.ToString()+"ms");
            }
            else
                    MessageBox.Show("放弃创建金字塔");
        }
        IRasterLayer pRasterLayer = new RasterLayer();
        pRasterLayer.CreateFromRaster(pRasterDS.CreateDefaultRaster());
        IMap pmap = mapControl.Map;
        pmap.AddLayer(pRasterLayer);
        mapControl.ActiveView.Refresh();
        OpenStatus();
    }
  5. 打开mxd

    /// <summary>
    /// 打开mxd数据
    /// </summary>
    private void openMXD(string path)
    {
        mapControl.MousePointer = esriControlsMousePointer.esriPointerHourglass;
        mapControl.LoadMxFile(path, 0, Type.Missing);
        mapControl.MousePointer = esriControlsMousePointer.esriPointerDefault;
        OpenStatus();
    }